package simulator;
import java.awt.*;

import javax.sound.sampled.AudioFormat;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.LineUnavailableException;
import javax.sound.sampled.SourceDataLine;

public class Tone  {
	private static void sound(int hz, int msecs, double vol)
			throws IllegalArgumentException, LineUnavailableException {

		if (vol > 1.0 || vol < 0.0)
			throw new IllegalArgumentException("Volume out of range 0.0- 1.0");

		byte[] buf = new byte[msecs * 8];

		for (int i=0; i<buf.length; i++) {
			double angle = i / (8000.0 / hz) * 2.0 * Math.PI;
			buf[i] = (byte)(Math.sin(angle) * 127.0 * vol);
		}

		// shape the front and back ends of the wave form
		for (int i=0; i<20 && i < buf.length / 2; i++) {
			buf[i] = (byte)(buf[i] * i / 20);
			buf[buf.length - 1 - i] = (byte)(buf[buf.length - 1 - i] *
					i / 20);
		}

		AudioFormat af = new AudioFormat(8000f,8,1,true,false);
		SourceDataLine sdl = AudioSystem.getSourceDataLine(af);
		sdl.open(af);
		sdl.start();
		sdl.write(buf,0,buf.length);
		sdl.drain();
		sdl.close();
	}
	
	public static void playTone(int freq, int duration) throws InterruptedException
	{
		try {
			Tone.sound(freq, duration*10, 1);
		} catch (IllegalArgumentException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (LineUnavailableException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	public static void HallOfMountainKing() throws InterruptedException
	{

		playTone(220,12);  
		playTone(247,12);  
		playTone(262,12);  
		playTone(294,12);  
		playTone(330,12);  
		playTone(262,12);  
		playTone(330,24);  
		playTone(311,12);  
		playTone(247,12);  
		playTone(311,24);  
		playTone(294,12);  
		playTone(233,12);  
		playTone(294,24);  
		playTone(220,12);  
		playTone(247,12);  
		playTone(262,12);  
		playTone(294,12);  
		playTone(330,12);  
		playTone(262,12);  
		playTone(330,12);  
		playTone(440,12);  
		playTone(392,12);  
		playTone(330,12);  
		playTone(262,12);  
		playTone(330,12);  
		playTone(392,48);  

//		playTone(220,12);  
//		playTone(247,12);  
//		playTone(262,12);  
//		playTone(294,12);  
//		playTone(330,12);  
//		playTone(262,12);  
//		playTone(330,24);  
//		playTone(311,12);  
//		playTone(247,12);  
//		playTone(311,24);  
//		playTone(294,12);  
//		playTone(233,12);  
//		playTone(294,24);  
//		playTone(220,12);  
//		playTone(247,12);  
//		playTone(262,12);  
//		playTone(294,12);  
//		playTone(330,12);  
//		playTone(262,12);  
//		playTone(330,12);  
//		playTone(440,12);  
//		playTone(392,12);  
//		playTone(330,12);  
//		playTone(262,12);  
//		playTone(330,12);  
//		playTone(392,48);  

//		playTone(330,12);  
//		playTone(370,12);  
//		playTone(415,12);  
//		playTone(440,12);  
//		playTone(494,12);  
//		playTone(415,12);  
//		playTone(494,24);  
//		playTone(523,12);  
//		playTone(440,12);  
//		playTone(523,24);  
//		playTone(494,12);  
//		playTone(415,12);  
//		playTone(494,24);  
//		playTone(330,12);  
//		playTone(370,12);  
//		playTone(415,12);  
//		playTone(440,12);  
//		playTone(494,12);  
//		playTone(415,12);  
//		playTone(494,24);  
//		playTone(523,12);  
//		playTone(440,12);  
//		playTone(523,24);  
//		playTone(494,48);  
//	
//		playTone(330,12);  
//		playTone(370,12);  
//		playTone(415,12);  
//		playTone(440,12);  
//		playTone(494,12);  
//		playTone(415,12);  
//		playTone(494,24);  
//		playTone(523,12);  
//		playTone(440,12);  
//		playTone(523,24);  
//		playTone(494,12);  
//		playTone(415,12);  
//		playTone(494,24);  
//		playTone(330,12);  
//		playTone(370,12);  
//		playTone(415,12);  
//		playTone(440,12);  
//		playTone(494,12);  
//		playTone(415,12);  
//		playTone(494,24);  
//		playTone(523,12);  
//		playTone(440,12);  
//		playTone(523,24);  
//		playTone(494,48);  
//
//		playTone(440,8);  
//		playTone(494,8);  
//		playTone(523,8);  
//		playTone(587,8);  
//		playTone(659,8);  
//		playTone(523,8);  
//		playTone(659,24);  
//		playTone(622,8);  
//		playTone(494,8);  
//		playTone(622,24);  
//		playTone(587,8);  
//		playTone(466,8);  
//		playTone(587,24);  
//		playTone(440,8);  
//		playTone(494,8);  
//		playTone(523,8);  
//		playTone(587,8);  
//		playTone(659,8);  
//		playTone(523,8);  
//		playTone(659,8);  
//		playTone(880,8);  
//		playTone(784,8);  
//		playTone(659,8);  
//		playTone(523,8);  
//		playTone(659,8);  
//		playTone(784,48);  
//
//		playTone(440,8);  
//		playTone(494,8);  
//		playTone(523,8);  
//		playTone(587,8);  
//		playTone(659,8);  
//		playTone(523,8);  
//		playTone(659,24);  
//		playTone(622,8);  
//		playTone(494,8);  
//		playTone(622,24);  
//		playTone(587,8);  
//		playTone(466,8);  
//		playTone(587,24);  
//		playTone(440,8);  
//		playTone(494,8);  
//		playTone(523,8);  
//		playTone(587,8);  
//		playTone(659,8);  
//		playTone(523,8);  
//		playTone(659,8);  
//		playTone(880,8);  
//		playTone(831,8);  
//		playTone(659,8);  
//		playTone(831,8);  
//		playTone(988,8);  
//		playTone(880,48); 
		return;
	}
}